/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package br.inf.ufg.model;

import br.inf.ufg.factory.ConexaoFactoryMySql;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
/**
 *
 * @author umarley.faria
 */
public class TipoAssentosDAO {
    
    private final Connection con;
    private final Statement stmt;
    private final Statement stmtNavegar;
    private ResultSet rsNavegar;
    
    public TipoAssentosDAO() throws ClassNotFoundException, SQLException{        
         
             con = ConexaoFactoryMySql.getConnection();
             stmt = con.createStatement();
             stmtNavegar = con.createStatement( ResultSet.TYPE_SCROLL_INSENSITIVE,
                     ResultSet.CONCUR_UPDATABLE );
             rsNavegar = stmtNavegar.executeQuery( "SELECT * FROM tiposassentos" );     
    
    }
    
    public TipoAssentos primeiro() throws SQLException {
        
            if (rsNavegar.first() ) {            
                TipoAssentos assento = new TipoAssentos();
                assento.setIdTipo(rsNavegar.getInt( "IDTIPO" ) );
                assento.setDescricao(rsNavegar.getString( "DESCRICAO" ) );
                
                return assento;
                
            } else {
                return null;
            }
        
    }
    
    public TipoAssentos anterior() throws SQLException {
        
            if ( ! rsNavegar.isFirst() ) {
                rsNavegar.previous();
                TipoAssentos assento = new TipoAssentos();
                assento.setIdTipo(rsNavegar.getInt( "IDTIPO" ) );
                assento.setDescricao(rsNavegar.getString( "DESCRICAO" ) );
                return assento; 
                
            } else {
                return null;
            }
        
    }
    
    
    public TipoAssentos proximo() throws SQLException {
        
            if ( ! rsNavegar.isLast() ) { 
                rsNavegar.next();                
                TipoAssentos assento = new TipoAssentos();
                assento.setIdTipo(rsNavegar.getInt( "IDTIPO" ) );
                assento.setDescricao(rsNavegar.getString( "DESCRICAO" ) );
                return assento; 
                
            } else {
                return null;
            }       
     }

     
     
      public TipoAssentos ultimo() throws SQLException {
        
            if ( rsNavegar.last() ) {               
                TipoAssentos assento = new TipoAssentos();
                assento.setIdTipo(rsNavegar.getInt( "IDTIPO" ) );
                assento.setDescricao(rsNavegar.getString( "DESCRICAO" ) );
                return assento;                 
            } else {
                return null;
            }  
            
      }
      
      
      public TipoAssentos pesquisarAssento( String param ) throws SQLException{               

                ResultSet rs = stmt.executeQuery( "SELECT * FROM tiposassentos WHERE DESCRICAO LIKE '%"+ param +"%'" );
                
              
              if ( rs.next() ) {      
                  TipoAssentos assento = new TipoAssentos();
                  assento.setIdTipo(rs.getInt( "IDTIPO" ) );
                  assento.setDescricao(rs.getString( "DESCRICAO" ) );
                  return assento;                 
              } else {
                  return null;
              } 
      }
      
      
      public String getNomeTipoAssentoByCod(int codigo ) throws SQLException{
          
             ResultSet rs = stmt.executeQuery( "SELECT DESCRICAO FROM tiposassentos WHERE IDTIPO = "+ codigo  );
                
              
              if ( rs.next() ) {
                  return rs.getString( "DESCRICAO" );
                                 
              } else {
                  return "";
              } 
          
      }
      
      public int getCodTipoAssentoByNome(String tipo ) throws SQLException{
          
             ResultSet rs = stmt.executeQuery( "SELECT IDTIPO FROM tiposassentos WHERE DESCRICAO = '"+ tipo +"'");
                
              //System.out.println("SELECT IDTIPO FROM tiposassentos WHERE DESCRICAO = "+ tipo);
              if ( rs.next() ) {
                  return rs.getInt( "IDTIPO" );
                                 
              } else {
                  return 0;
              } 
          
      }
      
      public TipoAssentos getTipoAssento(int codigo ) throws SQLException{
          
             ResultSet rs = stmt.executeQuery( "SELECT * FROM tiposassentos WHERE IDTIPO = "+ codigo  );
                
              
              if ( rs.next() ) {      
                  TipoAssentos assento = new TipoAssentos();
                  assento.setIdTipo(rs.getInt( "IDTIPO" ) );
                  assento.setDescricao(rs.getString( "DESCRICAO" ) );
                  return assento;                 
              } else {
                  return null;
              } 
          
      }
      
      

      
      
      
      public boolean excluirRegistro( TipoAssentos assento ) throws SQLException {
      
            stmt.executeUpdate( "DELETE FROM tiposassentos WHERE IDTIPO = " + assento.getIdTipo() );
            rsNavegar = stmtNavegar.executeQuery( "SELECT * FROM tiposassentos" );
            return true;        
      }
      
      public boolean salvarRegistro( TipoAssentos assento ) throws SQLException, Exception{
          
         // int cod = assento.getIdTipo();
          String nome = assento.getDescricao();
        try {
            stmt.executeUpdate( "INSERT INTO `tiposassentos` (`DESCRICAO`) VALUES ('"+ nome +"')");
            rsNavegar = stmtNavegar.executeQuery( "SELECT * FROM tiposassentos" );
            return true;
            
        } catch ( SQLException e) {
            throw new Exception("Erro ao inserir dados. Tente novamente " + e.getMessage());
            
        }
          
      }
      
      
      public boolean atualizarRegistro( TipoAssentos assento ) throws SQLException, Exception{
          
          int cod = assento.getIdTipo();
          String nome = assento.getDescricao();
        try {
            stmt.execute("UPDATE tiposassentos SET DESCRICAO = '" + nome + "' WHERE IDTIPO = " + cod);
            rsNavegar = stmtNavegar.executeQuery( "SELECT * FROM tiposassentos" );
            return true;
            
        } catch ( SQLException e) {
            throw new Exception("Erro ao atualizar dados. Tente novamente " + e.getMessage());
            
        }
          
      }
      
      
      public ArrayList<TipoAssentos> ListarAssentos() throws SQLException {
          
          Statement stmtListar = con.createStatement();
          ResultSet rsListar = stmtListar.executeQuery( "SELECT * FROM tiposassentos");
          
          ArrayList<TipoAssentos> retorno = new ArrayList<TipoAssentos>();
            
            while ( rsListar.next() ) {
                int cod = rsListar.getInt("IDTIPO" );
                String nome = rsListar.getString( "DESCRICAO" );
                
                TipoAssentos assentos = new TipoAssentos();
                assentos.setIdTipo(cod );
                assentos.setDescricao(nome );
                
                
                retorno.add( assentos );
            }
            
            return retorno;
      }
      
      

      
    
    
}
